#include <iostream>
#include <stack>
#include <vector>
#include <algorithm>


std::vector<int> solve_bigger(const std::vector<int>&v)
{
    // 初始化矩阵以及单调栈
    std::vector<int>res;
    std::stack<int>s;
    int n = v.size();

    
    // 现在的问题是倒序遍历还是正序遍历
    // 找到该元素后边第一个大于该元素的下标
    for (int i = n-1;i >=0;i--)
    {
        // 如果倒着遍历-会一直push_back()
        // 把下标往栈中push???
        if(s.empty())
        {
            res.push_back(n);
        }

        // 如果不为空
        while (v[s.top()]<v[i])
        {
            s.pop();
        }


        // 如果为空依旧n
        if (s.empty())
        {
            res.push_back(n);
        }
        else 
        {
            res.push_back(s.top());
        }
        s.push(i);

    }
    // 最后返回倒序矩阵
    std::reverse(res.begin(),res.end());    
    return res; 
}

int main()
{
    // I'm just fascinated?
    std::vector<int>v;
    v.push_back(2);
    v.push_back(1);
    v.push_back(5);
    v.push_back(3);
    v.push_back(4);

    // Result about 2 1 4 3 2 
    std::vector<int>res = solve_bigger(v);
    for(auto i:res)
    {
        std::cout<<i<<std::endl;
    }

    return 0;
}